/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-10-11
 * Time:16:10
 */

/**
 * 力扣1790:仅执行一次字符串交换能否使两个字符串相等
 */
//"yyvtopecrihtlzngzpdmvbndbqjttbfytdwxgrduykrksznjqdkhdpbnsailadlncqfqxgczukqedaaoeeqbfhrcemxs"
//"yyvtopecrihtlzngzpdmvbndbljttbfytdwxgrduykrksznjqdkhdpbnsailadqncqfqxgczukqedaaoeeqbfhrcemxs"
public class areAlmostEqual {
    public static void main(String[] args) {
        String s1 = "yyvtopecrihtlzngzpdmvbndbqjttbfytdwxgrduykrksznjqdkhdpbnsailadlncqfqxgczukqedaaoeeqbfhrcemxs";
        String s2 = "yyvtopecrihtlzngzpdmvbndbljttbfytdwxgrduykrksznjqdkhdpbnsailadqncqfqxgczukqedaaoeeqbfhrcemxs";
        System.out.println(areAlmostEqual(s1, s2));
    }

    /**
     * 给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下：选出某个字符串中的两个下标（不必不同），并交换这两个下标所对应的字符。
     * 如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等，返回 true ；否则，返回 false 。
     */
//    public static boolean areAlmostEqual(String s1, String s2) {
//        int index1 = 0;
//        int index2 = 0;
//        int len = s1.length();
//        int count = 0;
//        int error = 0;
//        while(index1 < len && index2 < len){
//            if (s1.charAt(index1) == s2.charAt(index2)) {
//                count++;
//                index1++;
//                index2++;
//            }else if (count >= len / 2 && error <= 2){
//                return true;
//            }else {
//                error++;
//                count = 0;
//                index1++;
//                index2++;
//            }
//        }
//        if (count >= len / 2 && error <= 2){
//            return true;
//        }
//        return false;
//    }
    public static boolean areAlmostEqual(String s1, String s2) {
        int a = -1;
        int b = -1;
        int len = s1.length();
        for(int i = 0;i < len;i++){
            if(s1.charAt(i) != s2.charAt(i)){
                //此时的a == -1 就是 第一次不相等的地方
                if(a == -1){
                    a = i;
                }else if(b == -1){
                    //此时的b == -1 就是 第二次不相等的地方
                    b = i;
                }else{
                    //三次不相等
                    return false;
                }
            }
        }
        //这里是指当有两个相同的字符串的时候
        if(a == -1 || b == -1){
            return a == b;
        }
        return s1.charAt(a) == s2.charAt(b) && s1.charAt(b) == s2.charAt(a);
    }
}
